home *** CD-ROM | disk | FTP | other *** search
- {
- >Has anyone written a function for creating a pathname ?
- >I'm having a problem with putting together a function that you
- >can pass a pathname to, such as: C:\WINDOWS\SYSTEM\STUFF
- >and have it create the path if it's at all possible.
- >the problem I'm having seems to stem from the fact that 'MKDIR()'
- >can only handle making one directory which is under the current one.
-
- This is because DOS' MkDir itself will fail if any element of a
- path is missing. You'll need to parse and build the path, going
- directory by directory.
-
- Here's some example code that you may use to create a MakePath
- function...
- }
-
- PROGRAM MakePath; { Create a path. July 21,1994 Greg Vigneault }
-
- VAR Try, Slash : BYTE;
- Error : WORD;
- TmpDir, IncDir, NewDir, OurDir : STRING;
- BEGIN
- WriteLn;
-
- NewDir := 'C:\000\111\222'; { an example path to create }
-
- GetDir (0,OurDir); { because we'll use CHDIR to confirm directories }
- WHILE NewDir[Length(NewDir)] = '\' DO DEC(NewDir[0]); { clip '\' }
- IncDir := ''; { start with empty string }
- REPEAT
- Slash := Pos('\',NewDir); { check for slash }
- IF (Slash <> 0) THEN BEGIN
- IncDir := IncDir + Copy( NewDir, 1, Slash ); { get directory }
- NewDir := Copy( NewDir, Slash+1, Length(NewDir)-Slash ); END
- ELSE
- IncDir := IncDir + NewDir;
- TmpDir := IncDir;
- IF (Length(TmpDir) > 3) THEN { clip any trailing '\' }
- WHILE TmpDir[Length(TmpDir)] = '\' DO DEC(TmpDir[0]);
- REPEAT
- {$I-} ChDir(TmpDir); {$I+} { try to log into the directory... }
- Error := IoResult;
- IF (Error <> 0) THEN BEGIN { couldn't ChDir, so try MkDir... }
- {$I-} MkDir(TmpDir); {$I+}
- Error := IoResult;
- END;
- IF (Error <> 0) THEN INC(Try) ELSE Try := 0;
- UNTIL (Error = 0) OR (Try > 3);
- IF (Error = 0) THEN WriteLn('"',TmpDir,'" -- okay');
- UNTIL (Slash = 0) OR (Error <> 0);
-
- IF (Error <> 0) THEN WriteLn('MkDir ',TmpDir,' failed!',#7);
-
- ChDir(OurDir); { log back into our starting directory }
-
- WriteLn;
- END {MakePath}.